<?php 
class venda_eventoModel extends Model{
    public $tabela = "venda_evento";
    public $pkey   = 'venda_evento_cod';
    public $model_label       = "Eventos";
    public $model_description = 
            "Os eventos permitirão que <b>Vendedores</b> cadastrados nas <b>Equipes de Venda</b> 
                possam realizar as <b>Visitas</b> aos clientes em potencial";
    public $dados  = array(
         'venda_evento_cod' => array(
	    'name'     => 'Código',
	    'type'     => 'int',
	    'size'     => '11',
	    'pkey'    => true,
	    'ai'      => true,
	    'grid'    => true,
	    'display' => true,
	    'private' => true
        ),
        
         'venda_produto_cod' => array(
	    'name'     => 'Produto',
	    'type'     => 'int',
	    'size'     => '11',
	    'grid'    => true,
            'default' => '1',
	    //'display' => true,
            'notnull'  => true,
            'filther' => "venda_produto_status = 'ativo'",
	    'fkey' => array(
	        'model' => 'venda/produto',
	        'cardinalidade' => '1n',
	        'keys' => array('venda_produto_cod', 'venda_produto_nome'),
                'ondelete' => 'restrict',
	    ),
        ),
        
        'venda_evento_titulo' => array(
	    'name'     => 'Título',
	    'type'     => 'varchar',
	    'size'     => '64',
	    'grid'    => true,
	    'display' => true,
            'notnull' => true,
        ),
        
         'venda_palestrante_cod' => array(
            'name'     => 'Palestrante',
	    'type'     => 'int',
	    'size'     => '11',
	    'grid'     => true,
	    'display'  => true,
            'notnull'  => true,
            'default'  => '1',
             'filther' => "venda_palestrante_status = 'ativo'",
	    'fkey' => array(
	        'model' => 'venda/palestrante',
	        'cardinalidade' => '1n',
	        'keys' => array('venda_palestrante_cod', 'venda_palestrante_nome'),
                'ondelete' => 'restrict',
	    ),
        ),
         'venda_evento_tipo' => array(
	    'name'     => 'Tipo',
	    'type'     => 'enum',
	    'default' => 'apresentacao',
	    'options' => array(
	    	'apresentacao' => 'Apresentação',
	    	'palestra'     => 'Palestra',
	    	'workshop'     => 'Workshop',
	    	'treinamento'  => 'Treinamento',
	    ),
	    'grid'    => true,
        ),
         'venda_evento_criadoem' => array(
	    'name'     => 'Data de Criação',
	    'type'     => 'timestamp',
            'private' => true,
	    'notnull' => true,
	    'grid'    => true,
        ),
        
        'venda_evento_iniciodivulgacao' => array(
	    'name'     => 'Início da Divulgação',
	    'type'     => 'datetime',
	    'especial' => 'calendar',
	    'notnull' => true,
	    'grid'    => true,
        ),
         'venda_evento_terminodivulgacao' => array(
	    'name'     => 'Término da Divulgação',
	    'type'     => 'datetime',
            'mindate'  => 'venda_evento_iniciodivulgacao',
	    'especial' => 'calendar',
	    'notnull'  => true,
	    'grid'     => true,
        ),
        
         'venda_evento_inicio' => array(
	    'name'     => 'Início do Evento',
	    'type'     => 'datetime',
	    'especial' => 'calendar',
            'mindate'  => 'venda_evento_terminodivulgacao',
	    'notnull' => true,
	    'grid'    => true,
	    'display' => true,
        ),
         'venda_evento_termino' => array(
	    'name'     => 'Término do Evento',
	    'type'     => 'datetime',
	    'especial' => 'calendar',
            'mindate'  => 'venda_evento_inicio',
	    'notnull' => true,
	    'grid'    => true,
	    'display' => true,
        ),
        
         'venda_evento_status' => array(
	    'name'    => 'Status',
	    'type'    => 'enum',
	    'default' => 'ativo',
            'private' => true,
	    'options' => array(
                'unsaved'       => 'Não Salvo',
	    	'ativo'         => 'Ativo',
                'agendado'      => 'Evento Agendado',
                'fimdivulgacao' => 'Divulgação Encerrada',
	    	'encerrado'     => 'Evento Encerrado',
	    	'excluido'      => 'Excluído',
	    ),
            'notnull' => true,
	    'grid'    => true,
        ),

        'vendas_evento_local' => array(
            'name' => 'Local do Evento',
            'type' => 'varchar',
            'size' => '64',
            'display' => true,
        ),
        
        'pessoal_endereco_cod' => array(
            'fieldset' => "Endereço do Evento",
            'name' => 'Endereço',
            'notnull' => true,
            'fkey' => array(
	        'model'         => 'pessoal/endereco',
	        'cardinalidade' => '11',
	        'keys' => array('pessoal_endereco_cod', 'pessoal_endereco_bairro', 'pessoal_endereco_cidade'),
	    ),
        ),

        
        'cod_usuario' => array(
	    'name'     => 'Criador do Evento',
	    'type'     => 'int',
	    'size'     => '11',
	    'pkey'    => true,
	    'grid'    => true,
            'especial' => 'autentication',
            'autentication' => array(
                'needlogin' => true
            ),
	    //'display' => true,
	    'fkey' => array(
	        'model' => 'usuario/login',
	        'cardinalidade' => '1n',
	        'keys' => array('cod_usuario', 'user_name', 'user_cargo'),
	    ),
        ),
        
        
        'anexo' => array(
	    'name'     => 'Arquivos',
            'type'     => 'int',
            'especial' => 'anexo',
            'anexo'    => array(
                'folder'    => 'venda/evento/',
                'showform'  => true,
                'showfiles' => false
            ),
            'fkey' => array(
	        'model'         => 'files/pasta',
	        'cardinalidade' => '11',
	        'keys' => array('cod_pasta', 'nome_pasta'),
	    ),
        ),

	'button' => array('button' => 'Gravar Evento'),
     );
    
    
    public function getDados() {
        $var = parent::getDados();
        $var['venda_evento_iniciodivulgacao']['default'] = timeResource::getDbDate();
        
        $this->LoadModel('venda/equipe', 'eq');
        $total = $this->eq->getCount();
        if($total == 0) unset($var['equipes_no_evento']);
        
        if(isset($_SESSION['venda/evento']) && CURRENT_ACTION != "formulario"){
            $var['anexo']['anexo']['folder'] = "venda/evento/".$_SESSION['venda/evento'];
        }else{
            $cod = $this->getCount() + 1;
            $var['anexo']['anexo']['folder'] = "venda/evento/$cod";
        }
        return $var;
    }
    
    
    /*
     * Retorna um evento ativo da equipe
     */
    public function getEventoAgendado($cod_equipe){
        return $this->getEventoByStatus($cod_equipe, 'agendado');
    }
    
    private function getEventoByStatus($cod_equipe, $status){
        $var = $this->selecionar(
                array('venda_evento_cod'), 
                "venda_equipe_cod = '$cod_equipe' AND venda_evento_status = '$status'",
                '', '', 'venda_evento_iniciodivulgacao ASC'
        );
        if(empty($var)) return "";
        $v = array_shift($var);
        return $v['venda_evento_cod'];
    }
    
    public function setEventoAtivo($cod_evento){
        $arr['venda_evento_status']           = 'ativo';
        $arr['venda_evento_iniciodivulgacao'] = timeResource::getFormatedDate();
        $bool = parent::editar($cod_evento, $arr);
        if(!$bool) return FALSE;
        
        //notifica aos usuários da equipe que o evento está disponível
        $this->LoadClassFromPlugin('venda/evento/eventoDialog', 'dia');
        $this->dia->disponivel($this->post, $cod_evento);
        return $bool;
        
    }
    
    /*
     * Atualiza o status dos eventos
     */
    public function atualizaEventos($cod_evento = ""){
        $this->db->ExecuteQuery("
            UPDATE venda_evento SET venda_evento_status = 'fimdivulgacao' WHERE venda_evento_terminodivulgacao < NOW() AND venda_evento_status NOT IN('excluido', 'unsaved');
            UPDATE venda_evento SET venda_evento_status = 'agendado'      WHERE venda_evento_iniciodivulgacao  > NOW() AND venda_evento_status NOT IN('excluido', 'unsaved');
            UPDATE venda_evento SET venda_evento_status = 'ativo'         WHERE venda_evento_iniciodivulgacao  < NOW() AND venda_evento_terminodivulgacao > NOW() AND venda_evento_status NOT IN('excluido', 'unsaved');
            UPDATE venda_evento SET venda_evento_status = 'encerrado'     WHERE venda_evento_termino           < NOW() AND venda_evento_status NOT IN('excluido', 'unsaved');
        ");
    }
    
    public function hasEventoAtivo($equipe){
        $this->LoadModel('venda/equipe', 'eq');
        $ev = $this->eq->getEventoAtivo($equipe);
        if($ev == "") return false;
        $count = $this->getCount("venda_evento_status = 'ativo' AND venda_evento_cod = '$ev'");
        return ($count != 0);
    }
    
    public function inserir($dados) {
        if(!parent::inserir($dados)) return false;
        $this->atualizaEventos($this->getLastId());
        return true;
    }
    
    
    public function editar($id, $post, $camp = "") {
        $this->LoadModel('files/pasta', 'fd');
        $post['anexo'] = $this->fd->getCodFolder("venda/evento/$id");
        $total = $this->getCount("venda_evento_cod = '$id' AND venda_evento_status = 'unsaved'");
        if($total != 0) $post['venda_evento_status'] = 'ativo';
        if(!parent::editar($id, $post, $camp)) return false;
        $this->atualizaEventos($this->getLastId());
        return true;
    }
    
    public function createEmpty(){
        $cod_usuario                  = usuario_loginModel::CodUsuario();
        $wh = "cod_usuario = '$cod_usuario' AND venda_evento_status = 'unsaved'";
        $var = $this->selecionar(array($this->pkey), $wh);
        if(empty($var)){
            
            $this->LoadModel('venda/produto', 'prod');
            $this->LoadModel('venda/palestrante', 'pal');
            
            $dados['venda_evento_titulo']   = 'Novo Evento';
            $dados['venda_produto_cod']     = $this->prod->getProdutoDefault();
            $dados['venda_palestrante_cod'] = $this->pal->getPalestranteDefault();
            $dados['cod_usuario']           = $cod_usuario;
            $dados['venda_evento_status']   = 'unsaved';
            if(!$this->inserir($dados)) return false;
            return $this->getLastId();
        }
        $var = array_shift($var);
        return $var[$this->pkey];
    }
    
    public function paginate($page, $link = "", $cod_item = "", $campo = "", $qtd = 20, $campos = array(), $adwhere = "", $orderby = "") {
        $camp  = str_replace("/", "_", $this->model_name)."_status";
        $where = ($adwhere == "")?"":"$adwhere AND ";
        $adwhere = "$where $camp != 'unsaved'";
        return parent::paginate($page, $link, $cod_item, $campo, $qtd, $campos, $adwhere, $orderby);
    }
    
    public function getTituloEvento($cod_evento){
        $var = $this->selecionar(array('venda_evento_titulo'), "venda_evento_cod = '$cod_evento'");
        $var = array_shift($var);
        return $var['venda_evento_titulo'];
    }
    
    public function getFiltherEstadoMenu($menu_title = "Estados"){
        $this->LoadModel('pessoal/endereco', 'end');
        $tb = $this->end->getTable();
        $dados = $this->end->getDados();
        $this->db->Join($this->tabela, $tb);
        $var = $this->selecionar(array('DISTINCT pessoal_endereco_estado'), "venda_evento_status != 'unsaved'", "", '', "pessoal_endereco_estado ASC");
        $arr = array('Todos os Eventos' => 'venda/evento/');
        if(!empty($var)){
            foreach ($var as $v){
                $temp = $dados['pessoal_endereco_estado']['options'][$v['pessoal_endereco_estado']];
                $arr[$temp] = 'venda/evento/filther/'.$v['pessoal_endereco_estado'];
            }
        }
        $this->LoadJsPlugin('menu/menu', 'mt');
        $this->mt->imprime();
        $var = (!empty ($arr))?$this->mt->draw($arr):"";
        EventTube::addEvent('menu-lateral', "<h3>$menu_title</h3>$var");
    }
    
    public function filther_uf($page, $value){
        $this->LoadModel('pessoal/endereco', 'end');
        $tb = $this->end->getTable();
        $this->db->Join($this->tabela, $tb);
        return parent::paginate($page, CURRENT_PAGE, '', '', 20, '', "pessoal_endereco_estado = '$value'");
    }
    
    public function is_ativo($cod_evento){
        $wh    = "venda_evento_cod = '$cod_evento' AND venda_evento_status IN ('ativo', 'agendado')";
        $total = $this->getCount($wh);
        return ($total > 0);
    }
    
    public function getConvidados($cod_evento){
        return $this->getPessoasNoEvento($cod_evento, "confirmado");
    }
    
    public function getAusentes($cod_evento){
        return $this->getPessoasNoEvento($cod_evento, "ausente");
    }
    
    public function getPresentes($cod_evento){
        return $this->getPessoasNoEvento($cod_evento, "compareceu");
    }
    
    public function getPessoasNoEvento($cod_evento, $status = ""){
        $status = ($status == "")?"":"AND venda_visitacomp.venda_visitacomp_status = '$status'";
        $this->LoadModel('venda/visitacomp', 'comp');
        $wh = "$this->tabela.venda_evento_cod = '$cod_evento' $status";
        return $this->comp->paginate(0, '', '', '', 0, array(), $wh);
    }
    
    public function getTerminoDivulgacao($cod_evento){
        $var = $this->selecionar(array('venda_evento_terminodivulgacao'), "venda_evento_cod = '$cod_evento'");
        if(empty($var)) return "";
        $v = array_shift($var);
        return $v['venda_evento_terminodivulgacao'];
    }
    
}
?>